﻿using System;
using System.Collections.Generic;

namespace IndustrialProgrammingProject.Rules
{
    /// <summary>
    /// Правила использования "if".
    /// </summary>
    class Ifs
    {

        // TODO.it3xl.ru: запрет сложности ифов;
        //  вынос проверок во веншние методы и свойства; запрет использования ифов без скобок.
        // Запрет оператора !, как малозаметного.


        public class IfRightRules : IRightRule
        {
            /// <summary>
            /// Правило! Забудьте про использование операторов ">" и ">=".
            /// Их для вас большле не существует!
            /// 
            /// Коллеги, я предвижу ваши вопросы.
            /// Ничего здесь не объясняю - если хотите дам литературу для обучения.
            /// 
            /// Показывает в своем теле примеры использования if с числовыми сравнениями.
            /// </summary>
            /// <param name="someInp"></param>
            private void IfWithNumbers(int someInp)
            {
                var some = 4;
                var other = 4;

                // Условие в if для числовых сравнений обязано следовать от меньшего к большему.
                // Здесь считается, что главное значение true будет получено, если первый операнд меньше второго.
                if (some < other)
                {
                    Dummy.DoSomething();
                }

                // Соответственно, есил ожидается что для true значение в other должно быть
                //  меньше в some, то в этом примере наоборот, первым следует other.
                if (other < some)
                {
                    Dummy.DoSomething();
                }
                else
                {
                    Dummy.DoOther();
                }

                // Порядок сравнения для Count и Length в if, т.к. часто используется неправильно!
                // Здесь считается, что true будет, когда Dummy.Items.Count будет больше нуля.
                // Поэтому Dummy.Items.Count идет после оператора сравнения.
                if(0 < Dummy.Items.Count)
                {
                    
                }
                if(Dummy.Items.Count < 3)
                {
                    
                }
                if(12 <= Dummy.Items.Count)
                {
                    
                }

            }

            /// <summary>
            /// Оператор логиче
            /// </summary>
            private void MarkSignForbidden()
            {
                
            }
        }

        
        /// <summary>
        /// Показаны примеры, как запрещено использовать "if".
        /// </summary>
        public class WrongIf : IAntiShitRule
        {
             
        }



        public class Dummy : IExampleSubstance
        {

            internal static void DoSomething()
            {
                throw new System.NotImplementedException();
            }

            internal static void DoOther()
            {
                throw new System.NotImplementedException();
            }

            public static List<object> Items { get; set; }
        }
    }
}
